package com.huxi.lang.object;

/**
 * 虚拟元素数组结构
 * 
 * @author jian.wu
 *
 */
public interface VList {

	/**
	 * 数组长度
	 * 
	 * @return 长度
	 */
	int size();

	/**
	 * 数组长度是否可变，可变数组可进行增加或删除元素。
	 * 
	 * @return 可变返回真，否则返回假。
	 */
	boolean isSizeMutable();

	/**
	 * 获取数组元素值
	 * 
	 * @param index 元素索引
	 * @return 元素值
	 * @throws ArrayIndexOutOfBoundsException 元素索引超过数组范围
	 */
	Object get(int index) throws ArrayIndexOutOfBoundsException;

	/**
	 * 设置数组元素值
	 * 
	 * @param index 元素索引
	 * @param value 元素值
	 * @throws ArrayIndexOutOfBoundsException 元素索引超过数组范围
	 */
	void set(int index, Object value) throws ArrayIndexOutOfBoundsException;

	/**
	 * 获取且设置数组元素值
	 * 
	 * @param index 元素索引
	 * @param value 元素值
	 * @return 前元素值
	 * @throws ArrayIndexOutOfBoundsException 元素索引超过数组范围
	 */
	Object getAndSet(int index, Object value) throws ArrayIndexOutOfBoundsException;

}
